package com.example.project.projectspringcloud.entity.order;

import com.example.project.projectspringcloud.entity.BaseEntity;
import com.example.project.projectspringcloud.entity.discountcoupon.DiscountCoupon;
import com.example.project.projectspringcloud.entity.user.User;
import com.example.project.projectspringcloud.utils.DateUtil;
import com.example.project.projectspringcloud.utils.WebUtil;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.util.Date;

@Data
@EqualsAndHashCode(callSuper = false)
public class Order extends BaseEntity {

    /**
     * 流水号
     */
    private String no;

    /**
     * 下单用户
     */
    private Integer userId;

    /**
     * 订单状态 1. 已完成 2. 未付款 3. 已取消 4. 已过期
     */
    private Integer status;

    /**
     * 订单状态下级状态 1. 已评价
     */
    private Integer statusStep;

    /**
     * 订单类型
     */
    private Integer type;

    /**
     * 使用优惠券
     */
    private Integer discount;

    /**
     * 订单价格
     */
    private BigDecimal totalPrice;

    /**
     * 订单实际价格
     */
    private BigDecimal actualPrice;

    /**
     * 订单虚拟价格
     */
    private BigDecimal visualPrice;

    /**
     * 返还价格
     */
    private BigDecimal backMoney;

    /**
     * 退还价格
     */
    private BigDecimal refundMoney;

    /**
     * 税务号
     */
    private String outTradeNo;

    /**
     * 乐观锁版本号
     */
    private Integer version;

    /**
     * 操作用户
     */
    private Integer operationUser;

    /**
     * 下单请求客户IP
     */
    private String requestClientIp;

    /**
     * 支付方式
     */
    private Integer payType;

    /**
     * 下单时间
     */
    private Date orderTime;

    /**
     * 支付时间
     */
    private Date payTime;

    /**
     * 备注
     */
    private String remark;

    /**
     * 附加内容对象 |||||
     * 订单详情
     */
    private OrderDetail orderDetail;

    /**
     * 下单用户
     */
    private User orderUser;

    /**
     * 发票信息
     */
    private OrderReceipt orderReceipt;

    /**
     * 优惠券
     */
    private DiscountCoupon discountCoupon;

    /**
     * 业务查询字段
     * 查询是否已评价订单 1. 待评价 2. 已评价
     */
    private Integer selectByEvaluateStatus;

    /**
     * 查询按同款和私人订制 1. 同款 2. 私人订制
     */
    private Integer selectByProductionMethod;

    /**
     * 查询时间范围
     */
    private Integer range;

    /**
     * 创建流水订单号
     *
     * @return
     */
    public String createOrderNo() {
        return WebUtil.getCurrentUser().getId() + DateUtil.toString(new Date(), "yyyyMMddHHmm");
    }

    public Order() {

    }

    public Order(Integer orderId) {
        setId(orderId);
    }
}